home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1419 / 1419.xpi / chrome / content / ietabSetting.js < prev    next >
Text File  |  2006-12-22  |  18KB  |  446 lines

  1. function IeTab() {}
  2.  
  3. IeTab.prototype = {
  4.    IExploreExePath: ""
  5. }
  6.  
  7. IeTab.prototype.getPrefFilterList = function() {
  8.    var s = this.getStrPref("ietab.filterlist", null);
  9.    return (s ? s.split(" ") : "");
  10. }
  11.  
  12. IeTab.prototype.addFilterRule = function(rule, enabled) {
  13.    var rules = document.getElementById('filterChilds');
  14.    var item = document.createElement('treeitem');
  15.    var row = document.createElement('treerow');
  16.    var c1 = document.createElement('treecell');
  17.    var c2 = document.createElement('treecell');
  18.    c1.setAttribute('label', rule);
  19.    c2.setAttribute('value', enabled);
  20.    row.appendChild(c1);
  21.    row.appendChild(c2);
  22.    item.appendChild(row);
  23.    rules.appendChild(item);
  24.    return (rules.childNodes.length-1);
  25. }
  26.  
  27. IeTab.prototype.initDialog = function() {
  28.    //get iexplore.exe path
  29.    this.IExploreExePath = IeTabExtApp.getIExploreExePath();
  30.  
  31.    //filter
  32.    document.getElementById('filtercbx').checked = this.getBoolPref("ietab.filter", true);
  33.    var list = this.getPrefFilterList();
  34.    var rules = document.getElementById('filterChilds');
  35.    while (rules.hasChildNodes()) rules.removeChild(rules.firstChild);
  36.    for (var i = 0; i < list.length; i++) {
  37.       if (list[i] != "") {
  38.          var item = list[i].split("\b");
  39.          var rule = item[0];
  40.          if (!/^\/(.*)\/$/.exec(rule)) rule = rule.replace(/\/$/, "/*");
  41.          var enabled = (item.length == 1);
  42.          this.addFilterRule(rule, enabled);
  43.       }
  44.    }
  45.    //general
  46.    document.getElementById('toolsmenu').checked = this.getBoolPref("ietab.toolsmenu", true);
  47.    document.getElementById('toolsmenu.icon').checked = this.getBoolPref("ietab.toolsmenu.icon", false);
  48.    document.getElementById('statusbar').checked = this.getBoolPref("ietab.statusbar", true);
  49.    document.getElementById('handleurl').checked = this.getBoolPref("ietab.handleUrlBar", false);
  50.    document.getElementById('alwaysnew').checked = this.getBoolPref("ietab.alwaysNewTab", false);
  51.    document.getElementById('focustab').checked  = this.getBoolPref("ietab.focustab", true);
  52.  
  53.    //context
  54.    document.getElementById('pagelink.embed').checked = this.getBoolPref("ietab.pagelink", true);
  55.    document.getElementById('tabsmenu.embed').checked = this.getBoolPref("ietab.tabsmenu", true);
  56.    document.getElementById('bookmark.embed').checked = this.getBoolPref("ietab.bookmark", true);
  57.  
  58.    document.getElementById('pagelink.extapp').checked = this.getBoolPref("ietab.pagelink.extapp", true);
  59.    document.getElementById('tabsmenu.extapp').checked = this.getBoolPref("ietab.tabsmenu.extapp", true);
  60.    document.getElementById('bookmark.extapp').checked = this.getBoolPref("ietab.bookmark.extapp", true);
  61.  
  62.    document.getElementById('pagelink.icon').checked = this.getBoolPref("ietab.icon.pagelink", false);
  63.    document.getElementById('tabsmenu.icon').checked = this.getBoolPref("ietab.icon.tabsmenu", false);
  64.    document.getElementById('bookmark.icon').checked = this.getBoolPref("ietab.icon.bookmark", false);
  65.  
  66.    //external
  67.    var path = this.getStrPref("ietab.extAppPath", "");
  68.    document.getElementById('pathbox').value = (path == "" ? this.IExploreExePath : path);
  69.    document.getElementById('parambox').value = this.getStrPref("ietab.extAppParam", "%1");
  70.    document.getElementById('ctrlclick').checked = this.getBoolPref("ietab.ctrlclick", true);
  71.  
  72.    //fill urlbox
  73.    var newurl = (window.arguments ? window.arguments[0] : ""); //get CurrentTab's URL
  74.    document.getElementById('urlbox').value = ( this.startsWith(newurl,"about:") ? "" : newurl);
  75.    document.getElementById('urlbox').select();
  76.  
  77.    //updateStatus
  78.    this.updateDialogPositions();
  79.    this.updateDialogAllStatus();
  80.    this.updateApplyButton(false);
  81. }
  82.  
  83. IeTab.prototype.updateApplyButton = function(e) {
  84.    document.getElementById("myExtra1").disabled = !e;
  85. }
  86.  
  87. IeTab.prototype.init = function() {
  88.    this.initDialog();
  89.    this.addEventListenerByTagName("checkbox", "command", this.updateApplyButton);
  90.    this.addEventListener("filterChilds", "DOMAttrModified", this.updateApplyButton);
  91.    this.addEventListener("filterChilds", "DOMNodeInserted", this.updateApplyButton);
  92.    this.addEventListener("filterChilds", "DOMNodeRemoved", this.updateApplyButton);
  93.    this.addEventListener("parambox", "input", this.updateApplyButton);
  94.    this.addEventListener("toolsmenu", "command", this.updateToolsMenuStatus);
  95. }
  96.  
  97. IeTab.prototype.destory = function() {
  98.    this.removeEventListenerByTagName("checkbox", "command", this.updateApplyButton);
  99.    this.removeEventListener("filterChilds", "DOMAttrModified", this.updateApplyButton);
  100.    this.removeEventListener("filterChilds", "DOMNodeInserted", this.updateApplyButton);
  101.    this.removeEventListener("filterChilds", "DOMNodeRemoved", this.updateApplyButton);
  102.    this.removeEventListener("parambox", "input", this.updateApplyButton);
  103.    this.removeEventListener("toolsmenu", "command", this.updateToolsMenuStatus);
  104. }
  105.  
  106. IeTab.prototype.updateInterface = function() {
  107.    var statusbar = this.getBoolPref("ietab.statusbar", true);
  108.    var icon = (window.arguments ? window.arguments[1] : null); //get status-bar icon handle
  109.    if (icon) this.setAttributeHidden(icon, statusbar);
  110. }
  111.  
  112. IeTab.prototype.setOptions = function() {
  113.    //filter
  114.    var filter = document.getElementById('filtercbx').checked;
  115.    this.setBoolPref("ietab.filter", filter);
  116.    this.setStrPref("ietab.filterlist", this.getFilterListString());
  117.  
  118.    //general
  119.    var toolsmenu = document.getElementById('toolsmenu').checked;
  120.    this.setBoolPref("ietab.toolsmenu", toolsmenu);
  121.    this.setBoolPref("ietab.toolsmenu.icon", document.getElementById('toolsmenu.icon').checked);
  122.  
  123.    var statusbar = document.getElementById('statusbar').checked;
  124.    this.setBoolPref("ietab.statusbar", statusbar);
  125.  
  126.    this.setBoolPref("ietab.handleUrlBar", document.getElementById('handleurl').checked);
  127.    this.setBoolPref("ietab.alwaysNewTab", document.getElementById('alwaysnew').checked);
  128.    this.setBoolPref("ietab.focustab", document.getElementById('focustab').checked);
  129.  
  130.    //context (ietab)
  131.    this.setBoolPref("ietab.pagelink", document.getElementById('pagelink.embed').checked);
  132.    this.setBoolPref("ietab.tabsmenu", document.getElementById('tabsmenu.embed').checked);
  133.    this.setBoolPref("ietab.bookmark", document.getElementById('bookmark.embed').checked);
  134.  
  135.    //context (extapp)
  136.    this.setBoolPref("ietab.pagelink.extapp", document.getElementById('pagelink.extapp').checked);
  137.    this.setBoolPref("ietab.tabsmenu.extapp", document.getElementById('tabsmenu.extapp').checked);
  138.    this.setBoolPref("ietab.bookmark.extapp", document.getElementById('bookmark.extapp').checked);
  139.  
  140.    //showicon
  141.    this.setBoolPref("ietab.icon.pagelink", document.getElementById('pagelink.icon').checked);
  142.    this.setBoolPref("ietab.icon.tabsmenu", document.getElementById('tabsmenu.icon').checked);
  143.    this.setBoolPref("ietab.icon.bookmark", document.getElementById('bookmark.icon').checked);
  144.  
  145.    //external
  146.    var path = document.getElementById('pathbox').value;
  147.    this.setStrPref("ietab.extAppPath", (path == this.IExploreExePath ? "" : path));
  148.  
  149.    var param = document.getElementById('parambox').value;
  150.    this.setStrPref("ietab.extAppParam", this.trim(param).split(/\s+/).join(" "));
  151.  
  152.    this.setBoolPref("ietab.ctrlclick", document.getElementById('ctrlclick').checked);
  153.  
  154.    //update UI
  155.    this.updateApplyButton(false);
  156.    this.updateInterface();
  157. }
  158.  
  159. IeTab.prototype.setAttributeHidden = function(obj, isHidden) {
  160.    if (!obj) return;
  161.    if (isHidden){
  162.       obj.removeAttribute("hidden");
  163.    }else{
  164.       obj.setAttribute("hidden", true);
  165.    }
  166. }
  167.  
  168. IeTab.prototype.getFilterListString = function() {
  169.    var list = [];
  170.    var filter = document.getElementById('filterList');
  171.    var count = filter.view.rowCount;
  172.  
  173.    for (var i=0; i<count; i++) {
  174.       var rule = filter.view.getCellText(i, filter.columns['columnRule']);
  175.       var enabled = filter.view.getCellValue(i, filter.columns['columnEnabled']);
  176.       var item = rule + (enabled=="true" ? "" : "\b");
  177.       list.push(item);
  178.    }
  179.    list.sort();
  180.    return list.join(" ");
  181. }
  182.  
  183. IeTab.prototype.updateToolsMenuStatus = function() {
  184.    document.getElementById("toolsmenu.icon").disabled = !document.getElementById("toolsmenu").checked;
  185. }
  186.  
  187. IeTab.prototype.updateDelButtonStatus = function() {
  188.    var en = document.getElementById('filtercbx').checked;
  189.    var delbtn = document.getElementById('delbtn');
  190.    var filter = document.getElementById('filterList');
  191.    delbtn.disabled = (!en) || (filter.view.selection.count < 1);
  192. }
  193.  
  194. IeTab.prototype.updateAddButtonStatus = function() {
  195.    var en = document.getElementById('filtercbx').checked;
  196.    var addbtn = document.getElementById('addbtn');
  197.    var urlbox = document.getElementById('urlbox');
  198.    addbtn.disabled = (!en) || (this.trim(urlbox.value).length < 1);
  199. }
  200.  
  201. IeTab.prototype.updateDialogAllStatus = function() {
  202.    var en = document.getElementById('filtercbx').checked;
  203.    document.getElementById('filterList').disabled = (!en);
  204.    document.getElementById('filterList').editable = (en);
  205.    document.getElementById('urllabel').disabled = (!en);
  206.    document.getElementById('urlbox').disabled = (!en);
  207.    this.updateAddButtonStatus();
  208.    this.updateDelButtonStatus();
  209.    this.updateToolsMenuStatus();
  210. }
  211.  
  212. IeTab.prototype.updateDialogPositions = function() {
  213.    var em = [document.getElementById('tabsmenu.embed'),
  214.              document.getElementById('pagelink.embed'),
  215.              document.getElementById('bookmark.embed')]
  216.    var ex = [document.getElementById('tabsmenu.extapp'),
  217.              document.getElementById('pagelink.extapp'),
  218.              document.getElementById('bookmark.extapp')]
  219.    var emMax = Math.max(em[0].boxObject.width, em[1].boxObject.width, em[2].boxObject.width);
  220.    var exMax = Math.max(ex[0].boxObject.width, ex[1].boxObject.width, ex[2].boxObject.width);
  221.    for (var i=0 ; i<em.length ; i++) em[i].width = emMax;
  222.    for (var i=0 ; i<ex.length ; i++) ex[i].width = exMax;
  223. }
  224.  
  225. IeTab.prototype.findRule = function(value) {
  226.    var filter = document.getElementById('filterList');
  227.    var count = filter.view.rowCount;
  228.    for (var i=0; i<count; i++) {
  229.       var rule = filter.view.getCellText(i, filter.columns['columnRule']);
  230.       if (rule == value) return i;
  231.    }
  232.    return -1;
  233. }
  234.  
  235. IeTab.prototype.addNewURL = function() {
  236.    var filter = document.getElementById('filterList');
  237.    var urlbox = document.getElementById('urlbox');
  238.    var rule = this.trim(urlbox.value);
  239.    if (rule != "") {
  240.       if ((rule != "about:blank") && (rule.indexOf("://") < 0)) {
  241.          rule = (/^[A-Za-z]:/.test(rule) ? "file:///"+rule.replace(/\\/g,"/") : rule);
  242.          if (/^file:\/\/.*/.test(rule)) rule = encodeURI(rule);
  243.       }
  244.       if (!/^\/(.*)\/$/.exec(rule)) rule = rule.replace(/\/$/, "/*");
  245.       rule = rule.replace(/\s/g, "%20");
  246.       var idx = this.findRule(rule);
  247.       if (idx == -1) { idx = this.addFilterRule(rule, true); urlbox.value = ""; }
  248.       filter.view.selection.select(idx);
  249.       filter.boxObject.ensureRowIsVisible(idx);
  250.    }
  251.    filter.focus();
  252.    this.updateAddButtonStatus();
  253. }
  254.  
  255. IeTab.prototype.delSelected = function() {
  256.    var filter = document.getElementById('filterList');
  257.    var rules = document.getElementById('filterChilds');
  258.    if (filter.view.selection.count > 0) {
  259.       for (var i=rules.childNodes.length-1 ; i>=0 ; i--) {
  260.          if (filter.view.selection.isSelected(i))
  261.             rules.removeChild(rules.childNodes[i]);
  262.       }
  263.    }
  264.    this.updateDelButtonStatus();
  265. }
  266.  
  267. IeTab.prototype.onClickFilterList = function(e) {
  268.    var filter = document.getElementById('filterList');
  269.    if (!filter.disabled && e.button == 0 && e.detail >= 2) {
  270.       if (filter.view.selection.count == 1) {
  271.          var urlbox = document.getElementById('urlbox');
  272.          urlbox.value = filter.view.getCellText(filter.currentIndex, filter.columns['columnRule']);
  273.          urlbox.select();
  274.          this.updateAddButtonStatus();
  275.       }
  276.    }
  277. }
  278.  
  279. IeTab.prototype.modifyTextBoxValue = function(textboxId, newValue) {
  280.    var box = document.getElementById(textboxId);
  281.    if (box.value != newValue) {
  282.       box.value = newValue;
  283.       this.updateApplyButton(true);
  284.    }
  285. }
  286.  
  287. IeTab.prototype.browseAppPath = function() {
  288.    const nsIFilePicker = Components.interfaces.nsIFilePicker;
  289.    var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  290.    fp.init(window, null, nsIFilePicker.modeOpen);
  291.    fp.appendFilters(nsIFilePicker.filterApps);
  292.    fp.appendFilters(nsIFilePicker.filterAll);
  293.    var rv = fp.show();
  294.    if (rv == nsIFilePicker.returnOK) {
  295.       this.modifyTextBoxValue("pathbox", fp.file.target);
  296.    }
  297. }
  298.  
  299. IeTab.prototype.resetAppPath = function() {
  300.    this.modifyTextBoxValue("pathbox", this.IExploreExePath);
  301.    this.modifyTextBoxValue("parambox", "%1");
  302. }
  303.  
  304. IeTab.prototype.saveToFile = function(aList) {
  305.    var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
  306.    var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
  307.    var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
  308.  
  309.    fp.init(window, null, fp.modeSave);
  310.    fp.defaultExtension = "txt";
  311.    fp.defaultString = "IETabPref";
  312.    fp.appendFilters(fp.filterText);
  313.  
  314.    if (fp.show() != fp.returnCancel) {
  315.       try {
  316.          if (fp.file.exists()) fp.file.remove(true);
  317.          fp.file.create(fp.file.NORMAL_FILE_TYPE, 0666);
  318.          stream.init(fp.file, 0x02, 0x200, null);
  319.          converter.init(stream, "UTF-8", 0, 0x0000);
  320.  
  321.          for (var i = 0; i < aList.length ; i++) {
  322.             aList[i] = aList[i] + "\n";
  323.             converter.writeString(aList[i]);
  324.          }
  325.       } finally {
  326.          converter.close();
  327.          stream.close();
  328.       }
  329.    }
  330. }
  331.  
  332. IeTab.prototype.loadFromFile = function() {
  333.    var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
  334.    var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
  335.    var converter = Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream);
  336.  
  337.    fp.init(window, null, fp.modeOpen);
  338.    fp.defaultExtension = "txt";
  339.    fp.appendFilters(fp.filterText);
  340.  
  341.    if (fp.show() != fp.returnCancel) {
  342.       try {
  343.          var input = {};
  344.          stream.init(fp.file, 0x01, 0444, null);
  345.          converter.init(stream, "UTF-8", 0, 0x0000);
  346.          converter.readString(stream.available(), input);
  347.          var linebreak = input.value.match(/(((\n+)|(\r+))+)/m)[1];
  348.          return input.value.split(linebreak);
  349.       } finally {
  350.          converter.close();
  351.          stream.close();
  352.       }
  353.    }
  354.    return null;
  355. }
  356.  
  357. IeTab.prototype.getAllSettings = function(isDefault) {
  358.    var prefservice = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
  359.    var prefs = (isDefault ? prefservice.getDefaultBranch("") : prefservice.getBranch("") );
  360.    var preflist = prefs.getChildList("ietab.", {});
  361.  
  362.    var aList = ["IETabPref"];
  363.    for (var i = 0 ; i < preflist.length ; i++) {
  364.       try {
  365.          var value = null;
  366.          switch (prefs.getPrefType(preflist[i])) {
  367.          case prefs.PREF_BOOL:
  368.             value = prefs.getBoolPref(preflist[i]);
  369.             break;
  370.          case prefs.PREF_INT:
  371.             value = prefs.getIntPref(preflist[i]);
  372.             break;
  373.          case prefs.PREF_STRING:
  374.             value = prefs.getComplexValue(preflist[i], Components.interfaces.nsISupportsString).data;
  375.             break;
  376.          }
  377.          aList.push(preflist[i] + "=" + value);
  378.       } catch (e) {}
  379.    }
  380.    return aList;
  381. }
  382.  
  383. IeTab.prototype.setAllSettings = function(aList) {
  384.    if (!aList) return;
  385.    if (aList.length == 0) return;
  386.    if (aList[0] != "IETabPref") return;
  387.  
  388.    var prefservice = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
  389.    var prefs = prefservice.getBranch("");
  390.  
  391.    var aPrefs = [];
  392.    for (var i = 1 ; i < aList.length ; i++){
  393.       var index = aList[i].indexOf("=");
  394.       if (index > 0){
  395.          var name = aList[i].substring(0, index);
  396.          var value = aList[i].substring(index+1, aList[i].length);
  397.          if (this.startsWith(name, "ietab.")) aPrefs.push([name, value]);
  398.       }
  399.    }
  400.    for (var i = 0 ; i < aPrefs.length ; i++) {
  401.       try {
  402.          var name = aPrefs[i][0];
  403.          var value = aPrefs[i][1];
  404.          switch (prefs.getPrefType(name)) {
  405.          case prefs.PREF_BOOL:
  406.             prefs.setBoolPref(name, /true/i.test(value));
  407.             break;
  408.          case prefs.PREF_INT:
  409.             prefs.setIntPref(name, value);
  410.             break;
  411.          case prefs.PREF_STRING:
  412.             if (value.indexOf('"') == 0) value = value.substring(1, value.length-1);
  413.             var sString = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  414.             sString.data = value;
  415.             prefs.setComplexValue(name, Components.interfaces.nsISupportsString, sString);
  416.             break;
  417.          }
  418.       } catch (e) {}
  419.    }
  420. }
  421.  
  422. IeTab.prototype.exportSettings = function() {
  423.    var aList = this.getAllSettings();
  424.    if (aList) this.saveToFile(aList);
  425. }
  426.  
  427. IeTab.prototype.importSettings = function() {
  428.    var aList = this.loadFromFile();
  429.    if (aList) {
  430.       this.setAllSettings(aList);
  431.       this.initDialog();
  432.       this.updateInterface();
  433.    }
  434. }
  435.  
  436. IeTab.prototype.restoreDefault = function() {
  437.    var aTemp = this.getAllSettings(false);
  438.    var aDefault = this.getAllSettings(true);
  439.    this.setAllSettings(aDefault);
  440.    this.initDialog();
  441.    this.setAllSettings(aTemp);
  442.    this.updateApplyButton(true);
  443. }
  444.  
  445. var gIeTab = new IeTab();
  446.